package com.hudson.pattern.flyweight;

import java.util.concurrent.ThreadLocalRandom;

/**
 * 享元模式:
 * 使用缓存,存储一些内部属性通用的实例,仅调整部分业务参数达到目的
 * 不会每次都单独创建对象。  应用于一些高频使用的对象,并且有着一些相同的属性可以共享,只是业务属性不同
 */
public class Main {

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            Circle circle = FlyweightFactory.get(getType());
            circle.setX(getX());
            circle.setY(getY());
            circle.setRadius(getRadius());
            circle.print();
        }
    }

    public static int getType() {
        return ThreadLocalRandom.current().nextInt(0, 11);
    }

    public static int getX() {
        return ThreadLocalRandom.current().nextInt(0, 101);
    }

    public static int getY() {
        return ThreadLocalRandom.current().nextInt(0, 101);
    }

    public static int getRadius() {
        return ThreadLocalRandom.current().nextInt(50, 101);
    }
}
